package com.ktjy.sample.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;


public class TimeSpanAspenct {
    private static final Logger logger= LoggerFactory.getLogger(TimeSpanAspenct.class);
    /**
     * 环绕增强
     */
    public Object around(ProceedingJoinPoint jp) throws Throwable{
        logger.info("[环境增强-前置]记录{}方法执行的开始时间.",jp.getSignature().getName());
        //进入方法之前就记录开始时间
        long startTime=System.currentTimeMillis();
        try{
            //通过priceed()方法可以执行目标方法
            Object result=jp.proceed();
            logger.info("[环境增强-后置]{}方法执行结果为{}.",jp.getSignature().getName(), result);
            //返回方法结果
            return result;
        }catch (Throwable e){
            logger.info("[环境增强-异常]{}方法执行 异常异信息为{}.",jp.getSignature().getName(),e.getMessage());
            throw e;
        }finally {
            //在finally中记录结束时间 保证不管正常化石异常都能记录执行时间
            long endTime=System.currentTimeMillis();
            logger.info("[环境增强-最终]{}方法执行结束,耗时{}毫秒.",jp.getSignature().getName(),endTime-startTime);
        }
    }
}
